package 数组;

/**
 * @author tmh
 * @date 2024/9/12 17:21
 * @description
 */
public class T238除自身以外数组的乘积 {
    public static int[] productExceptSelf(int[] nums) {
        int len = nums.length;
        //result一开始用来保存每个数字左面部分的乘积，最后用来保存结果
        int[] result = new int[len];
        int temp = 1;
        //第一个数字左面没有额外的数字了，所以第一个数字左面部分的乘积是1
        result[0] = 1;
        for (int i = 1; i < len; i++) {
            //解释：当前数字左面数字的乘积等于前面一个数字左面部分的乘积*前面一个数字
            result[i] = result[i - 1] * nums[i - 1];
        }
        //直接从数组里面的倒数第二个数开始赋值，因为最后一个数的乘积已经在上面算完了
        for (int i = len - 2; i >= 0; i--) {
            //temp：这个数字左面部分的乘积
            temp = temp * nums[i + 1];
            //右面的result[i]：这个数字右面部分的乘积
            result[i] = result[i] * temp;
        }
        return result;
    }
}
